#include "junix.h"
using namespace std;


struct A {
	A(int n=0) : i(n) {
	}

	A& swap(A& rhs) {
		std::swap(i, rhs.i);
		return *this;
	}

	A& operator=(int& i) {
		A(i).swap(*this);
		return *this;
	}

	A& operator= (const A& a) {
		A(a.i).swap(*this);
		return *this;
	}

	int i;
};

int main(int argc, char **argv)
{
	A a(9999);
	A b(6666);
	a.swap(b);
	cout<<a.i<<endl;
}
